package indi.coffeenc.queuedownloader;

import indi.coffeenc.queuedownloader.strategy.SimpleTaskHolderStrategy;
import indi.coffeenc.queuedownloader.strategy.TaskHolderStrategy;
import indi.coffeenc.queuedownloader.strategy.Task;

public class TaskHolder {

    private static TaskHolderStrategy strategy;
    private static String strategyName = "SIMPLE_STRATEGY";

    static {
        initialize();
    }

    /**
     * 类初始化方法
     */
    private static void initialize(){
        if(strategyName.equals("SIMPLE_STRATEGY")){
            strategy = new SimpleTaskHolderStrategy();
        }
    }

    /**
     * 添加/创建下载任务
     */
    public static String add(Task task){
        if (exists(task.getSource()))
            return "task already exists";
        strategy.add(task);
        return "successful";
    }

    /**
     * 取消/删除/完成下载任务
     * 任务下载完成后，将任务从队列中移除，只在数据库中保留记录
     */
    public static void delete(String uuid){ strategy.delete(uuid); }
    /**
     * 暂停
     * 仅处于等待状态和正在下载状态的任务可以执行此操作
     */
    public static void pause(String uuid){ strategy.pause(uuid);}
    /**
     * 开始
     * 仅处于暂停状态的任务可以执行该操作
     */
    public static void start(String uuid){ strategy.start(uuid);}
    /**
     * 进度
     * uuid用于位于确定Task
     * 举例：如果下载进度为72%，则返回72
     */
    public static int progress(String uuid){ return strategy.progress(uuid);}
    /**
     * 获取下载任务列表
     * 直接返回至前端，用于前端显示
     */
    public static String getAll(){ return strategy.getAll(); }
    /**
     * 获取下一个下载任务
     */
    public static Task get(){ return strategy.get(); }
    /**
     * 判断 正在下载队列 是否为空
     */
    public static boolean isEmpty(){ return strategy.isEmpty(); }
    /**
     * 判断是否存在相同下载任务
     */
    private static boolean exists(String source){ return strategy.exists(source); }
}
